package com.cskaoyan.javase.oop2._1extends._8initialization._0introduction;
/**
 * 何为子类对象初始化问题?
 *
 * 我们先复习一下我们认识引用数据类型的过程：
 * 首先我们从数组对象的初始化开始，我们知道引用数据类型变量分为两个部分:
 *      在堆上创建对象，在栈中创建引用，引用通过存储地址指向堆上的对象。
 *      对象是引用数据类型的实质，但是我们不能直接访问对象，而是通过栈上的引用间接访问堆上的对象。
 *
 * 然后我们学习了对象与类的概念，引入了类加载的概念。
 * 并且使用数据类型的定义统一了引用数据类型和基本数据类型：
 *      数据类型：一组数据 + 基于数据的一组合法操作
 *      定义类：成员变量的合集 + 成员方法的合集
 *
 * 也就是说，引用数据类型（类）是特殊的数据类型，是自定义的数据类型。
 * 这种自定义的数据类型JVM不认识它，需要一个了解认识它的过程，称之为类加载。
 * 类加载的特点:
 *      1.懒加载
 *      2.迫不得已,必须类加载某个类的场景称之为"类加载的时机":
 *          a.new对象
 *          b.启动main方法
 *          c.访问静态成员
 *      3.(最重要)类加载只有一次
 * 类加载的流程:
 *      加载 --> 连接(验证,准备,解析) --> 初始化
 *      准备: 执行静态成员变量的默认初始化,具有默认值
 *      初始化: 执行该类的clinit方法,按照代码顺序从上到下执行
 *          静态代码块,以及静态成员变量的显式赋值
 *
 * JVM通过类加载了解一个类型，从而能够完成创建对象，或者其它的一些操作。
 * -------------------------------------------------------------------------
 *
 * 现在我们学习了继承的概念，在继承中，子类会继承父类的成员，使用子类对象可以直接访问父类中继承过来的成员。
 * 那么问题就来了：
 *      1.父类的成员从何而来？凭空出现？
 *      2.父类的成员变量也需要赋值，那么赋值顺序是怎么样的？
 *          结果是怎么样的？为什么会体现出这种特点？
 *
 * 以上问题就是子类对象的初始化问题，即研究子类对象创建时，父类的成员从何而来，父类成员变量的赋值等相关的问题。
 *
 * 说白了,就是研究一个子类对象,究竟如何创建,中间发生了什么事情
 *
 * @since 11:06
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}
